#pragma once

#include <vector>
#include <utility>

namespace sorting
{
    /**
     * @brief       直接选择排序
     * @tparam  T   基本数据类型
     * @param   vec 基本数据类型的数组
     */
    template <typename T>
    void DirectSelectionSort(std::vector<T> &vec)
    {
        using std::size_t;

        const size_t len = vec.size();
        if (len <= 1)
        {
            return;
        }

        size_t minIdx;
        for (size_t i = 0; i < len - 1; ++i)
        {
            minIdx = i;
            for (size_t j = i + 1; j < len; ++j)
            {
                if (vec[j] < vec[minIdx])
                {
                    minIdx = j;
                }
            }

            if (minIdx != i)
            {
                std::swap(vec[minIdx], vec[i]);
            }
        }
    }
} // namespace sorting